#pragma once

#include "../umlmodel_global.h"

#include "Association.h"
#include "Class.h"

namespace uml {

/// <summary>
/// AssociationClass
/// A model element that has both Association and Class properties. An
/// AssociationClass can be seen as an Association that also has Class properties,
/// or as a Class that also has Association properties. It not only connects a set
/// of Classifiers but also defines a set of Features that belong to the Association
/// itself and not to any of the associated Classifiers.
/// </summary>
class UMLMODEL_EXPORT AssociationClass : public Class, public Association {

public: // Constructors and destructors
    explicit AssociationClass(const QString& umlType="uml::AssociationClass");

public: // JsonSerializable override
    void fromJson(const QJsonObject& json, QStringList& errorList) override;
    void toJson(QJsonObject& json) override;

};

} // namespace uml
